package com.senlingspace.system.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.senlingspace.common.annotation.Excel;
import com.senlingspace.common.core.domain.BaseEntity;
import com.senlingspace.common.utils.MoneyUtils;
import com.senlingspace.system.domain.SlkjOrder;
import com.senlingspace.system.domain.SlkjOrderPricingSnapshot;
import com.senlingspace.system.domain.dto.SlkjOrderSplitSnapshotDto;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 订单详情对象Vo
 *
 * @author SenlingSpace
 * @date 2024-07-25
 */

@Data
public class OrderDetailVo extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /*订单详情*/
    List<SlkjOrderPricingSnapshotVo> ticketLevelCategory;

    /*订单分账快照*/
    List<SlkjOrderSplitSnapshotVo> slkjOrderSplitSnapshot;

    /*订单状态表*/
    List<SlkjOrderStatusLogVo> findByOrderIds;

    /**
     * 订单金额，包含优惠+包含税（元）
     */
    @Excel(name = "订单金额")
    private String totalAmount;


    /*用户购买票总数量*/
    private Long bayQuantitySum;
    /*用户购买商品总数量*/
    private Integer bayQuantityGoodsSum;
    /**
     * 开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date beginTime;

    /**
     * 结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;


    /**
     * 主键
     */
    private Long orderId;

    /**
     * 订单编号
     */
    @Excel(name = "订单编号")
    private String orderNumber;

    /**
     * 门店ID
     */
    @Excel(name = "门店ID")
    private Long shopId;

    /**
     * 门店名称;冗余字段
     */
    @Excel(name = "门店名称")
    private String shopName;

    /**
     * 订单来源（10=门店，20=抖音，30=美团，40=小程序）
     */
    @Excel(name = "订单来源")
    private Integer source;

    /**
     * 订单类型：101=门票、102=商品、103=门票+商品
     */
    @Excel(name = "订单类型")
    private Integer orderType;

    /**
     * 项目ID
     */
    @Excel(name = "项目ID")
    private Long projectId;

    /**
     * 项目名称;冗余字段
     */
    @Excel(name = "项目名称")
    private String projectName;

    /**
     * 核销码
     */
    @Excel(name = "核销码")
    private String verifyCode;


    /**
     * 优惠金额（分）
     */
    @Excel(name = "优惠金额")
    private Integer discountAmount;

    /**
     * 实际支付金额（元）
     * <p>
     * 如果是拉卡拉支付的话，对应的是拉卡拉的账户端结算金额（acc_settle_amount）
     * 账户端结算金额（acc_settle_amount）=消费者实付金额（payer amount）+账户端优惠金额（acc discount amount）
     */
    @Excel(name = "账户端结算金额")
    private String actualAmount;

    /** 商品类业务状态：待支付（PENDING_PAYMENT）、已完成（COMPLETED）、待取货（WAITING_FOR_PICKUP）、待发货（WAITING_FOR_SHIPPING）、已发货（SHIPPED）、订单取消（ORDER_CANCELLED）、REFUNDED（已退款） **/
    private String goodsStatus;
    /**
     * 税额（分）
     */
    private Integer taxAmount;

    /**
     * 税率
     */
    private BigDecimal taxRate;

    /**
     * 税前金额（分）
     */
    private Integer preTaxAmount;

    /**
     * 税后金额（分）
     */
    private Integer afterTaxAmount;

    /**
     * 总票价（分）
     */
    private Integer ticketTotalAmount;

    /**
     * 服务费 / 10000 = 元
     */
    private Integer feeAmount;

    /**
     * 商户实收金额 / 10000 = 元
     */
    private Integer settleAmount;

    /**
     * 业务状态：
     * 待核销（UNREDEEMED）、
     * 已核销（REDEEMED）、
     * 待支付（PENDING_PAYMENT）、
     * 订单取消（ORDER_CANCELLED）、
     * 已退款（REFUNDED）、
     * 已领手环（WRISTBAND_RECEIVED）、
     * 已领设备（DEVICE_RECEIVED）、
     * 已完成（COMPLETED）
     */
    @Excel(name = "业务状态")
    private String businessStatus;

    /**
     * 支付状态：INIT-初始化 CREATE-下单成功 SUCCESS-交易成功 FAIL-交易失败 DEAL-交易处理中 UNKNOWN-未知状态 CLOSE-订单关闭 PART_REFUND-部分退款 REFUND-全部退款(或订单被撤销）
     */
    @Excel(name = "支付状态")
    private String paymentStatus;

    /**
     * 支付方式；WECHAT（微信），ALIPAY（支付宝），UQRCODEPAY（银联支付），BESTPAY（翼支付），DCPAY（数字货币支付），INCASH（现金支付）,SUNING(苏宁易付宝)
     */
    @Excel(name = "支付方式")
    private String paymentType;

    /**
     * 第三方单号;比如：美团、抖音
     */
    @Excel(name = "第三方单号")
    private String thirdOrderNumber;

    /**
     * 支付时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date paymentTime;

    /**
     * 拉卡拉支付请求ID
     */
    private String paymentRequestId;


    public String getActualAmount() {
        return actualAmount;
    }

    public void setActualAmount(Integer actualAmount) {
        String actualAmountYuan = null;
        if (actualAmount != null) {
            actualAmountYuan = MoneyUtils.fen2Yuan(actualAmount);
        }

        this.actualAmount = actualAmountYuan;
    }

    public void setTotalAmount(Integer totalAmount) {
        String totalAmountYuan = null;
        if (totalAmount != null) {
            totalAmountYuan = MoneyUtils.fen2Yuan(totalAmount);
        }

        this.totalAmount = totalAmountYuan;
    }

    public String getTotalAmount() {
        return totalAmount;
    }


}
